﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sispe.Entities;
using Sispe.Repository;
using Microsoft.Practices.Unity;

namespace Sispe.BussinesLogic
{
    public class LiquidacionBL:ILiquidacionBL
    {
        [Dependency]
        public ILiquidacionRepository liquidacionRepos { get; set; }

        public List<Entities.LIQUIDACION> GetAllFromLiquidacion()
        {
            return liquidacionRepos.GetAllFromLiquidacion();
        }

        public List<Entities.LIQUIDACION> GetAllFromLiquidacionByTrabajador(string descripcion)
        {
            return liquidacionRepos.GetAllFromLiquidacionByTrabajador(descripcion);
        }

        public Entities.LIQUIDACION GetFromLiquidacionById(int id)
        {
            return liquidacionRepos.GetFromLiquidacionById(id);
        }

        public void AddLiquidacion(Entities.LIQUIDACION liquidacion)
        {
            var msg = "";
            
            var ok = liquidacion.Validate(out msg);

            liquidacionRepos.AddLiquidacion(liquidacion);
            //var msg = "";
            //var ok = liquidacion.Validate(out msg);
            //if (ok)
            //{
            //    var duplicidad = liquidacionRepos.ExisteDuplicidad(liquidacion.CONTRATO.TRABAJADOR.PERSONA.NombreCompleto, liquidacion.IdLiquidacion);

            //    if (!duplicidad)
            //    {
            //        liquidacionRepos.AddLiquidacion(liquidacion);
            //    }
            //    else
            //    {
            //        var error = string.Format("Ya existe una liquidación con el mismo trabajador: " + liquidacion.CONTRATO.TRABAJADOR.PERSONA.NombreCompleto);
            //        throw new Exception(error);
            //    }
            //}
            //else
            //{
            //    throw new Exception(msg);
            //}
        }

        public void UpdateLiquidacion(Entities.LIQUIDACION liquidacion)
        {

            var msg = "";

            var ok = liquidacion.Validate(out msg);

            liquidacionRepos.UpdateLiquidacion(liquidacion);
            //var msg = "";
            //var ok = liquidacion.Validate(out msg);
            //if (ok)
            //{
            //    var duplicidad = liquidacionRepos.ExisteDuplicidad(liquidacion.CONTRATO.TRABAJADOR.PERSONA.NombreCompleto, liquidacion.IdLiquidacion);

            //    if (!duplicidad)
            //    {
            //        liquidacionRepos.UpdateLiquidacion(liquidacion);
            //    }
            //    else
            //    {
            //        var error = string.Format("Ya existe una liquidación con el mismo trabajador: " + liquidacion.CONTRATO.TRABAJADOR.PERSONA.NombreCompleto);
            //        throw new Exception(error);
            //    }
            //}
            //else
            //{
            //    throw new Exception(msg);
            //}
        }

        public void DeleteLiquidacion(int id)
        {
            liquidacionRepos.DeleteLiquidacion(id);
        }


        public LIQUIDACION GetFromLiquidacionByNumeroContrato(int id)
        {
            return liquidacionRepos.GetFromLiquidacionByNumeroContrato(id);
        }
    }
}
